% vim:encoding=utf8 ft=tex sts=2 sw=2 et:

\documentclass{classrep}
\usepackage[utf8]{inputenc}
\usepackage{color}
\usepackage{tikz}
\usepackage{array}
\usepackage{multirow}


\makeatletter\newwrite\verbatim@out\makeatother
\usepackage{gnuplottex}


\newcolumntype{+}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces
}



%--------------------------------------------------------------------------------------
% Alter some LaTeX defaults for better treatment of figures:
    % See p.105 of "TeX Unbound" for suggested values.
    % See pp. 199-200 of Lamport's "LaTeX" book for details.
    %   General parameters, for ALL pages:
    \renewcommand{\topfraction}{0.9}	% max fraction of floats at top
    \renewcommand{\bottomfraction}{0.8}	% max fraction of floats at bottom
    %   Parameters for TEXT pages (not float pages):
    \setcounter{topnumber}{2}
    \setcounter{bottomnumber}{2}
    \setcounter{totalnumber}{6}     % 2 may work better
    \setcounter{dbltopnumber}{2}    % for 2-column pages
    \renewcommand{\dbltopfraction}{0.9}	% fit big float above 2-col. text
    \renewcommand{\textfraction}{0.07}	% allow minimal text w. figs
    %   Parameters for FLOAT pages (not text pages):
    \renewcommand{\floatpagefraction}{0.7}	% require fuller float pages
	% N.B.: floatpagefraction MUST be less than topfraction !!
    \renewcommand{\dblfloatpagefraction}{0.7}	% require fuller float pages

	% remember to use [htp] or [htpb] for placement

%-------------------------------------------------------------------------------------






\studycycle{Informatyka, studia dzienne, inż I st.}
\coursesemester{VI}

%\coursename{Angelologia teoretyczna i stosowana}
\coursename{Inteligentna analiza danych}
\courseyear{2013/2014}

\courseteacher{dr inż. Arkadiusz Tomczyk}
\coursegroup{wtorek, 10.15}

\author{
  \studentinfo{Patryk Powiłan}{173180} \and
  \studentinfo{Mateusz Łędzewicz}{173132}
}

\title{Zadanie 2 }
\svnurl{https://serce.ics.p.lodz.pl/svn/labs/iad/at_wt_10_15/LePo/Kod/Zad2}

\begin{document}
\maketitle


\section{Cel}
{
Celem zadania była implementacja oraz przebadanie cech zadania grupowania danych za pomocą:
\begin{itemize}
\item Algorytmu k-średnich, 
\item Samoorganizującej się sieci neuronowe w dwóch wariantach metody jej nauki:
\begin{itemize}
\item Algorytmu Kohonena,
\item Algorytmu gazu neuronowego.
\end{itemize}
\end{itemize}
W części badawczej została sprawdzona poprawność działania algorytmów oraz wpływ parametrów metody na uzyskiwane wyniki. 
 }

\section{Wprowadzenie}
{
%\subsection{Algorytm k-średnich}
%{
%Algorytm k-średnich to iteracyjny algorytm, w którym początkowo w przestrzeni z danymi rozmieszczane jest k centrów. Następnie w każdej iteracji do każdego z centrów przyporządkowywane są dane wejściowe na podstawie ich odległości do centrum oraz aktualizowane jest położenie centrum, które wyznaczane jest jako średnia z przyporządkowanych do niego danych. Iteracje te powtarzane są tak długo aż położenie centrów ulegnie stabilizacji. W celu uniknięcia lokalnych minimów operację można powtarzać losoując wielokrotnie początkowe położenie centrów i za najlepsze rozwiązanie uznając to, które posiada najmniejszy błąd kwantyzacji.
%}

\subsection{Sieci samoorganizujące się}
{
Sieć realizująca klasyczną samoorganizującą się mapę składa się ze zbioru neuronów. Neurony rywalizują za sobą o prawo do reprezentowania wzorca wejściowego, oznacza to, że ten który odpowie najsilniej jest ostatecznie przyjmowany jako reprezentant wzorca. Funkcja transmisji neuronów jest przeważnie (i takiej należy użyć rozwiązując niniejsze zadanie) funkcją odległości między wektorem wejściowym a wektorem wag, a dany neuron możemy zinterpretować jako punkt/wektor w przestrzeni wzorców wejściowych. Znalezienie optymalnego rozkładu neuronów w przestrzeni możliwe jest na kilka sposobów:
}

\subsubsection{Algorytm Kohonena}
{
Klasyczny algorytm Kohonena zakłada adaptację wag jedynie neuronu zwycięskiego i neuronów znajdujących się nie dalej niż zadanych promienia sąsiedztwa. Oprócz tego należy zaimplementować adaptację z wykorzystaniem gaussowskiej funkcji sąsiedztwa, określającej współczynnik nauki neuronów przegrywających rywalizację w funkcji ich odległości od zwycięscy. Ponadto należy uwzględnić zjawisko pojawiania się martwych neuronów uwzględniając aktywność neuronów w procesie uczenia.
}

\subsubsection{Algorytm gazu neuronowego}
{
Algorytm działa analogicznie jak poprzedni, przy czym zagadnienie sąsiedztwa rozwiązane jest przez uporządkowanie neuronów w szereg w zależności od odległości ich wektorów wagowych od podanego wektora wejściowego. Współczynnik nauki wyznaczany jest w tym przypadku na podstawie pozycji w szeregu, a nie faktycznej odległości. Ważną rolę odgrywa strategia doboru i zmiany współczynników.
}



}

\section{Opis implementacji}


%\begin{figure}[h!]
%\scriptsize
%	
%
%    \includegraphics{uml/uml.png}
%\caption { Diagram UML sieci}
%\end{figure}

Nasze rozwiązanie działa według następującaj sekwencji:
\begin{itemize}
\item tworzymy dane treningowe (według trzech zaimplementowanych wzorców: kwadrat, koło, trójkąt);
\item tworzymy dane wejsciowe: punkty - neurony;
\item tworzymy sieć słożoną z wylosowanych punktów;
\item wybieramy algorytm, z którego chcemy korzystać (algorytm Kohonena lub Gazu Neuronowego);
\item uruchamiamy proces nauki sieci.
\end{itemize}
Wzorce danych treningowych zostały zaimplementowane w klasach SquareGenerator, CircleGenerator, TriangleGenerator. Dane wejściowe tworzone są za pomocą klasy RandomGenerator, natomiast algortmy sieci zostały zaimplementowane w klasach Kohonen oraz NeuronGas. Klasa Network zawiera strukturę sieci. Całość została zaimplementowana w języku C\#. 

\section{Materiały i metody}
\subsection{Badanie Algorytmu Kohonena}
W tej części sprawdziliśmy wpływ poszczególnych parametrów algorytmu na czas i dokładność nauki sieci. 

\subsubsection{Badanie 1 - Wpływ współczynnika nauki na liczbę epok oraz ilość martwych neuronów}
    \begin{itemize}
    \item Test 1
    \begin{itemize}
    \item współczynnik nauki: 0.1
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
     \item Test 2
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
    \item Test 3
    \begin{itemize}
    \item współczynnik nauki: 1
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    \end{itemize}

\subsubsection{Badanie 2 - Wpływ promienia sąsiedztwa na liczbę epok oraz ilość martwych neuronów}
    \begin{itemize}
    \item Test 1
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.2
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
     \item Test 2
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
    \item Test 3
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 2
    \item czas uśpienia neuronu: 2
    \end{itemize}
    \end{itemize}
    
\subsubsection{Badanie 3 - Wpływ czasu uśpienia na liczbę epok oraz ilość martwych neuronów}
    \begin{itemize}
    \item Test 1
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 0
    \end{itemize}
    
     \item Test 2
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
    \item Test 3
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 5
    \end{itemize}
    \end{itemize}
    
\subsection{Badanie Algorytmu Gazu Neuronowego}
W tej części sprawdziliśmy wpływ poszczególnych parametrów algorytmu na czas i dokładność nauki sieci. 

\subsubsection{Badanie 1 - Wpływ współczynnika nauki na liczbę epok oraz ilość martwych neuronów}
       \begin{itemize}
    \item Test 1
    \begin{itemize}
    \item współczynnik nauki: 0.1
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
     \item Test 2
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
    \item Test 3
    \begin{itemize}
    \item współczynnik nauki: 1
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    \end{itemize}

\subsubsection{Badanie 2 - Wpływ promienia sąsiedztwa na liczbę epok oraz ilość martwych neuronów}
    \begin{itemize}
    \item Test 1
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.2
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
     \item Test 2
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
    \item Test 3
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 2
    \item czas uśpienia neuronu: 2
    \end{itemize}
    \end{itemize}
    
\subsubsection{Badanie 3 - Wpływ czasu uśpienia na liczbę epok oraz ilość martwych neuronów}
    \begin{itemize}
    \item Test 1
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 0
    \end{itemize}
    
     \item Test 2
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 2
    \end{itemize}
    
    \item Test 3
    \begin{itemize}
    \item współczynnik nauki: 0.5
    \item promień sąsiedztwa: 0.7
    \item czas uśpienia neuronu: 5
    \end{itemize}
    \end{itemize}
    

\clearpage
\section{Wyniki}
{
\subsection{Algorytm Kohonena}

\begin{table}[h]
	\scriptsize
	\begin{flushleft}
		\begin{tabular}{|+c|^c|^c|^c|^c|}
		\hline
		\rowstyle{\bfseries}%
		liczba epok  &liczba martwych neuronów & współczynnik nauki&promień sąsiedztwa & czas uśpienia  \\ \rowstyle{\bfseries}%

		& &  &  & \\ \hline
		484 & 4 & 0,1 & 0,7 & 2 \\ \hline
		502 & 4 & 0,5 & 0,7 & 2 \\ \hline
		77 & 4 & 1 & 0,7 & 2 \\ \hline


		\hline
		\end{tabular}
	\end{flushleft}
\caption {Badanie 1) Wyniki uzyskane dla współczynnika nauki równego 0.1; 0.5 oraz 1}
\end{table}

\begin{table}[h]
	\scriptsize
	\begin{flushleft}
		\begin{tabular}{|+c|^c|^c|^c|^c|}
		\hline
		\rowstyle{\bfseries}%
		liczba epok  &liczba martwych neuronów & współczynnik nauki&promień sąsiedztwa & czas uśpienia  \\ \rowstyle{\bfseries}%

		& &  &  & \\ \hline
		30 & 5 & 0,5 & 0,2 & 2 \\ \hline
		214 & 3 & 0,5 & 0,7 & 2 \\ \hline
		1000 & 0 & 0,5 & 2 & 2 \\ \hline


		\hline
		\end{tabular}
	\end{flushleft}
\caption {Badanie 2) Wyniki uzyskane dla promienia sąsiedztwa równego 0.2; 0.7 oraz 2}
\end{table}



\begin{table}[h]
	\scriptsize
	\begin{flushleft}
		\begin{tabular}{|+c|^c|^c|^c|^c|}
		\hline
		\rowstyle{\bfseries}%
		liczba epok  &liczba martwych neuronów & współczynnik nauki&promień sąsiedztwa & czas uśpienia  \\ \rowstyle{\bfseries}%

		& &  &  & \\ \hline
		9 & 7 & 0,5 & 0,7 & 0 \\ \hline
		187 & 3 & 0,5 & 0,7 & 2 \\ \hline
		1000 & 1 & 0,5 & 0,7 & 5 \\ \hline


		\hline
		\end{tabular}
	\end{flushleft}
\caption {Badanie 3) Wyniki uzyskane dla czasu uśpienia równego 0; 2 oraz 5}
\end{table}




\subsection{Algorytm Gazu Neuronowego}

\begin{table}[h]
	\scriptsize
	\begin{flushleft}
		\begin{tabular}{|+c|^c|^c|^c|^c|^c|}
		\hline
		\rowstyle{\bfseries}%
		liczba epok  &liczba martwych neuronów & współczynnik nauki& \multicolumn{2}{c|}{promień sąsiedztwa} & czas uśpienia  \\ \rowstyle{\bfseries}%

		& &  & min & max & \\ \hline
		592 & 1 & 0,1 & 0,001 & 0,7  & 2 \\ \hline
		687 & 2 & 0,5 & 0,001 & 0,7  & 2 \\ \hline
		435 & 0 & 1 & 0,001 & 0,7  & 2 \\ \hline


		\hline
		\end{tabular}
	\end{flushleft}
\caption {Badanie 1) Wyniki uzyskane dla współczynnika nauki równego 0.1; 0.5 oraz 1}
\end{table}

\begin{table}[h]
	\scriptsize
	\begin{flushleft}
		\begin{tabular}{|+c|^c|^c|^c|^c|^c|}
		\hline
		\rowstyle{\bfseries}%
		liczba epok  &liczba martwych neuronów & współczynnik nauki& \multicolumn{2}{c|}{promień sąsiedztwa} & czas uśpienia  \\ \rowstyle{\bfseries}%

		& &  & min & max & \\ \hline
		670 & 4 & 0,5 & 0,001 & 0,2  & 2 \\ \hline
		723 & 1 & 0,5 & 0,001 & 0,7  & 2 \\ \hline
		400 & 0 & 0,5 & 0,001 & 2  & 2 \\ \hline


		\hline
		\end{tabular}
	\end{flushleft}
\caption {Badanie 2) Wyniki uzyskane dla promienia sąsiedztwa równego 0.2; 0.7 oraz 2}
\end{table}

\begin{table}[h]
	\scriptsize
	\begin{flushleft}
		\begin{tabular}{|+c|^c|^c|^c|^c|^c|}
		\hline
		\rowstyle{\bfseries}%
		liczba epok  &liczba martwych neuronów & współczynnik nauki& \multicolumn{2}{c|}{promień sąsiedztwa} & czas uśpienia  \\ \rowstyle{\bfseries}%

		& &  & min & max & \\ \hline
		401 & 1 & 0,5 & 0,001 & 0,7  & 0 \\ \hline
		426 & 1 & 0,5 & 0,001 & 0,7  & 2 \\ \hline
		621 & 0 & 0,5 & 0,001 & 0,7  & 5 \\ \hline


		\hline
		\end{tabular}
	\end{flushleft}
\caption {Badanie 3) Wyniki uzyskane dla czasu uśpienia równego 0; 2 oraz 5}
\end{table}






\section{Dyskusja}

To że proces stabilizacji sieci zahodzi dłużej wcale nie jest złym objawem. Zmniejszenie liczny martwych neuronów oraz dłuższe stabilizowanie się sieci może oznaczać że sieć lepiej odzwierciedli wzorzec. Promień sąsiedztwa w przypadku obu sieci polepsza jej efektywność, jednak należy pamiętać by nie nadużywać tego parametru, gdyż może on przynieść zupełnie odwrotne skutki. 

Oba algorytmy działają bardzo podobnie. Można zauważyć, że al. gazu neuronowego troche lepiej radzi Sobie z martwymi neuronami i w przypadku małej ich ilości szybciej stabilizuje sieć. Dla mniejszej ilości martwych neuronów szybciej stabilizuje się sieć wspomagana przez algorytm Kohonena. Jednak wcale nie świadczy to dobrze o tym algorytmie.



    
  

\section{Wnioski}
\subsection{Algorytm Kohonena}
\begin{itemize}
\item[*] Jak widać w badaniu 1 współczynnik nauki w tym przypadku nie wpływa na liczbę martwych neuronów. Zmiana współczynnika powoduje przyśpieszenie procesu stabilizacji sieci. 
\item[*] Zwiększenie promienia sąsiedztwa niweluje liczbę martwych neuronów, jednak spowalnia proces stabilizacji sieci.
\item[*] Zmiana czas uśpienia podobnie jak promienia sąsiedztwa powoduje mniejszą stabilizacje jednak zmiejsza liczbę martwych neuronów. 
\end{itemize}

\subsection{Algorytm Gazu Neuronowego}
\begin{itemize}
\item[*] Zmiana współczynnika wpływa podobnie jak w przypadku sieci Kohonena, przyśpiesza proces nauki - stablizizcji wag. 
\item[*] Zwiększenie promienia sąsiedztwa dało niezwykłe rezultaty: krótszy proces stabilizacji sieci oraz mniejsza liczba martwych neuronów.
\item[*] Czasu uśpienia podobnie jak w przypadku sieci Kohonena powoduje dłuższą stabilizacje sieci. Delikatnie zmniejsza liczbę martwych neuronów.

\end{itemize}

\begin{thebibliography}{0}
Instrukcja do zadania : \url{<http://ftims.edu.p.lodz.pl/mod/page/view.php?id=28135>}
\end{thebibliography}

\end{document}
